package com.example.yitter;

import com.github.yitter.contract.IdGeneratorOptions;
import com.github.yitter.idgen.YitIdHelper;

/**
 * long类型位数过长, 前端数值类型溢出.<hr/>
 * 不能直接返回数字类型, 需返回字符串. 如: <br/>"7168946595545747457"
 */
public class YitterSnowflakeId implements SnowflakeIdGenerator {
    /**
     * 起始时间 2024-01-01 00:00:00 (秒)
     */
    private static final long EPOCH = 1704038400000L;

    /**
     * @param machineId 机器ID
     */
    public YitterSnowflakeId(int machineId) {
        IdGeneratorOptions options = new IdGeneratorOptions((short) machineId);
        options.WorkerIdBitLength = 10; // 默认值6，限定 WorkerId 最大值为2^6-1，即默认最多支持64个节点。
        options.SeqBitLength = 12; // 默认值6，限制每毫秒生成的ID个数。若生成速度超过5万个/秒，建议加大 SeqBitLength 到 10。
        options.BaseTime = EPOCH; // 如果要兼容老系统的雪花算法，此处应设置为老系统的BaseTime。
        // ...... 其它参数参考 IdGeneratorOptions 定义。

        // 保存参数（务必调用，否则参数设置不生效）：
        YitIdHelper.setIdGenerator(options);
    }

    @Override
    public long generate() {
        return YitIdHelper.nextId();
    }
}
